package com.zj.dmsproxy.interfaces;

import com.alibaba.fastjson.JSONObject;
import com.zj.baseproxy.model.Page;
import com.zj.dmsproxy.wrapper.DmsWrapper;

import java.util.function.Consumer;
import java.util.function.Function;

/**
 * dms基础模板
 *
 * @author arthur_zhou
 * @date 2023/10/8 10:48
 */
public interface DmsBaseMapper<Dto> extends IGetter<Dto> {

    /**
     * dms取数据通用方法 返回响应json
     *
     * @param json 请求json
     * @return 响应json
     */
    JSONObject getJson(String json);

    /**
     * dms取数据通用方法 配合@JSONField(name = "XXX")使用
     *
     * @param json 请求json
     * @return 分页
     */
    Page<Dto> get(String json);

    /**
     * dms取数据通用方法 遍历收集jsonArray结果集
     *
     * @param json 请求json
     * @param func 遍历收集每个jsonObject的方法
     * @return
     */
    <T> Page<T> map(String json, Function<JSONObject, T> func);


    /**
     * dms通用方法 遍历jsonArray结果集
     *
     * @param json     请求json
     * @param consumer 遍历每个jsonObject的方法
     */
    void foreach(String json, Consumer<JSONObject> consumer);

    /**
     * dms取数据通用方法 配合@JSONField(name = "XXX")使用
     *
     * @param json  请求json
     * @param clazz 返回类型
     * @return
     */
    <T> Page<T> get(String json, Class<T> clazz);

    /**
     * dms取数据通用方法 配合@JSONField(name = "XXX")使用
     *
     * @param wrapper 条件拼接器
     * @return 分页
     */
    Page<Dto> get(DmsWrapper wrapper);

    /**
     * dms取数据通用方法 配合@JSONField(name = "XXX")使用
     *
     * @param wrapper 条件拼接器
     * @param clazz   返回类型
     * @return 分页
     */
    <T> Page<T> get(DmsWrapper wrapper, Class<T> clazz);

    /**
     * dms取数据通用方法 遍历收集jsonArray结果集
     *
     * @param wrapper 条件拼接器
     * @param func    遍历收集每个jsonObject的方法
     * @return 分页
     */
    <T> Page<T> map(DmsWrapper wrapper, Function<JSONObject, T> func);

    /**
     * dms通用方法 遍历jsonArray结果集
     *
     * @param wrapper  条件拼接器
     * @param consumer 遍历每个jsonObject的方法
     */
    void foreach(DmsWrapper wrapper, Consumer<JSONObject> consumer);
}
